<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>巧用柯里化</title>
</head>
<body>
<script>
  /*
  * 下面这两种写法其实都是传递了三个参数 只不过第一种写法是显示的传递三个参数 而第二周写法第三个参数没有直接传递
  *
  *
  * */
  function isBetween1(item,a, b) {
    return item<b && item>a
  }

  /*
  * 这里的外层函数所做的只是接收一下参数，主要的逻辑在内层函数
  * */
  function isBetween2(a,b) {
    return function(item){
      return item<b && item>a
    }
  }


  let numbers = [2,1,5,6,7].filter(item => item<10 && item>5);

/*
* 传递三个参数的写法其实是在定义一个函数并返回然后filter底层会调用这个方法
* */
  let number2 = [2,1,5,6,7].filter(item =>isBetween1(item,5,10));

  let number2_ = [2,1,5,6,7].filter(function(item) {
    return isBetween1(item,5,10)
  });

/*
* 而这种写法其实是一上来先调用一个函数然后将返回的函数进行定义交给filter底层调用
* 巧妙的一上来将三个参数中的两个进行传递
*
* */
  let number3 = [2,1,5,6,7].filter(isBetween2(5,10));
  console.log(numbers);
  console.log(number2);
  console.log(number3);




</script>
</body>
</html>